﻿/*
 * Created by SharpDevelop.
 * User: Lousabit
 * Date: 05/10/2011
 * Time: 10:27
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Runtime.Remoting.Messaging;
using DAOFactory;
using Business_Entity;

namespace DAOFactory
{
	/// <summary>
	/// Description of DAOCliente.
	/// </summary>
	public class DAOCliente
	{
		
		public DAOCliente()
		{
			//
		}		

		public int insertarNuevoCliente(BECliente beCliente){ 	
				
			int estadoTran = 0;
			
			try {								
				
				SqlCommand cmd = new SqlCommand("VENTAS_REGISTRAR_CLIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;							
				
				//INFOR PERSONAL				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = beCliente.Nombre;
				
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = beCliente.ApellidoPaterno;
				
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = beCliente.ApellidoMaterno;
				
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);
				cmd.Parameters["@SEXO"].Value = beCliente.Sexo;
				
				cmd.Parameters.Add("@IDTIPODOCUMENTO", SqlDbType.Int);
				cmd.Parameters["@IDTIPODOCUMENTO"].Value = beCliente.BeTipoDocumento.IdTipoDoc;
				
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = beCliente.DocumentoIdentidad;
				
				cmd.Parameters.Add("@FECNACIMIENTO", SqlDbType.DateTime);
				cmd.Parameters["@FECNACIMIENTO"].Value = beCliente.FechaNacimiento;				
				
				//info de contacto				
				cmd.Parameters.Add("@DIRECCION", SqlDbType.VarChar, 200);
				cmd.Parameters["@DIRECCION"].Value = beCliente.Direccion;
				
				cmd.Parameters.Add("@TELEFONO", SqlDbType.VarChar, 15);
				cmd.Parameters["@TELEFONO"].Value = beCliente.TelefonoContacto;
				
				//INFO CONFIGURACION				
				cmd.Parameters.Add("@FECCREACION", SqlDbType.DateTime);
				cmd.Parameters["@FECCREACION"].Value = beCliente.FechaCreacion;
				
				cmd.Parameters.Add("@FECULTMODIFICACION", SqlDbType.DateTime);
				cmd.Parameters["@FECULTMODIFICACION"].Value = beCliente.FechaModificacion;
				
				cmd.Parameters.Add("@IDESTADO", SqlDbType.Int);
				cmd.Parameters["@IDESTADO"].Value = beCliente.BeEstadoCliente.IdEstadoCliente;
				
				cmd.Parameters.Add("@IDCATEGORIA", SqlDbType.Int);
				cmd.Parameters["@IDCATEGORIA"].Value = beCliente.BeCategoriaCliente.IdCategoria;
				
				//cmd.Parameters.Add("@IDUSUARIO", SqlDbType.Int);
				//cmd.Parameters["@IDUSUARIO"].Value = beCliente.?¿;
								
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				cmd.ExecuteNonQuery();			
				
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				//ConnectionManager.closeConnection();
			}
			catch(SqlException e)
			{				
				System.Windows.Forms.MessageBox.Show(e.ToString(),"Error");
			}
			
			return estadoTran;								
		}
				
		
		public List<BECliente> buscarListaClientes()
		{
			//System.Windows.Forms.MessageBox.Show("mostrar todos");
			object estadoTran = null;
			SqlDataReader amd = null;
			List<BECliente> lista = new List<BECliente>();			
			
			try
			{
				SqlCommand cmd = new SqlCommand("VENTAS_BUSCARTOTAL_CLIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
							
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;							
				
				amd = cmd.ExecuteReader();			
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;														
					
				if (amd.HasRows) 
				{
					while(amd.Read())
					{						
							BECliente cliente = new BECliente();
							cliente.IdCliente = int.Parse(amd[0].ToString());
							cliente.Nombre = amd[1].ToString();
							cliente.ApellidoPaterno = amd[2].ToString();
							cliente.ApellidoMaterno = amd[3].ToString();
							BETipoDocumento tipoDocumento = new BETipoDocumento();
							tipoDocumento.IdTipoDoc = int.Parse(amd[15].ToString());
							tipoDocumento.Descripcion = amd[16].ToString();
							cliente.BeTipoDocumento = tipoDocumento;
							cliente.DocumentoIdentidad = amd[5].ToString();
							cliente.Sexo = amd[6].ToString();
							cliente.Direccion = amd[8].ToString();
							cliente.TelefonoContacto = amd[9].ToString();
							cliente.FechaNacimiento = Convert.ToDateTime(amd[7].ToString());
							cliente.FechaCreacion = Convert.ToDateTime(amd[10].ToString());
							cliente.FechaModificacion = Convert.ToDateTime(amd[11].ToString());
							BEEstadoCliente beEstadoCliente =  new BEEstadoCliente();
							beEstadoCliente.IdEstadoCliente = int.Parse(amd[17].ToString());
							beEstadoCliente.Descripcion = amd[18].ToString();
							cliente.BeEstadoCliente = beEstadoCliente;
							BECategoriaCliente beCategoriaCliente = new BECategoriaCliente();
							beCategoriaCliente.IdCategoria = int.Parse(amd[19].ToString());
							beCategoriaCliente.Nombre = amd[20].ToString();
							cliente.BeCategoriaCliente = beCategoriaCliente;																
							lista.Add(cliente);						
					}					
				}																	
			}
			catch(SqlException e)
			{
				System.Windows.Forms.MessageBox.Show(e.ToString(),"Error");				
			}	
			
			if (amd != null)
				amd.Close();
			return lista;								
		}
		
		public List<BECliente> buscarListaClientes(BECliente beCliente)
		{			
			SqlDataReader amd = null;
			object estadoTran = null;
			List<BECliente> lista = new List<BECliente>();
			
			try
			{
				SqlCommand cmd = new SqlCommand("VENTAS_BUSCAR_CLIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
								
				cmd.Parameters.Add("@IDCLIENTE", SqlDbType.VarChar,10);
				if(beCliente.IdCliente == -1)
					cmd.Parameters["@IDCLIENTE"].Value = "";
				else
					cmd.Parameters["@IDCLIENTE"].Value = beCliente.IdCliente.ToString();
				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = beCliente.Nombre;
				
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = beCliente.ApellidoPaterno;
				
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = beCliente.ApellidoMaterno;
				
				cmd.Parameters.Add("@IDTIPODOC", SqlDbType.VarChar, 10);				
				if(beCliente.BeTipoDocumento.Descripcion.Equals("")){
					cmd.Parameters["@IDTIPODOC"].Value = "";
				}else{					
					cmd.Parameters["@IDTIPODOC"].Value = beCliente.BeTipoDocumento.IdTipoDoc.ToString();					
				}
				
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = beCliente.DocumentoIdentidad;	
				
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);	
				cmd.Parameters["@SEXO"].Value = beCliente.Sexo;
				
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;							
				
				amd = cmd.ExecuteReader();			
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;
																
				if (amd.HasRows) 
				{
					while(amd.Read())
					{
							BECliente cliente = new BECliente();
							cliente.IdCliente = int.Parse(amd[0].ToString());
							cliente.Nombre = amd[1].ToString();
							cliente.ApellidoPaterno = amd[2].ToString();
							cliente.ApellidoMaterno = amd[3].ToString();
							cliente.BeTipoDocumento = new BETipoDocumento();
							cliente.BeTipoDocumento.IdTipoDoc = int.Parse(amd[4].ToString());
							cliente.BeTipoDocumento.Descripcion = amd[5].ToString();
							cliente.DocumentoIdentidad = amd[6].ToString();
							cliente.Sexo = amd[7].ToString();
							cliente.Direccion = amd[8].ToString();
							cliente.TelefonoContacto = amd[9].ToString();
							cliente.FechaNacimiento = Convert.ToDateTime(amd[10].ToString());
							cliente.FechaCreacion = Convert.ToDateTime(amd[11].ToString());
							cliente.FechaModificacion = Convert.ToDateTime(amd[12].ToString());
							cliente.BeEstadoCliente = new BEEstadoCliente();
							cliente.BeEstadoCliente.IdEstadoCliente = int.Parse(amd[13].ToString());
							cliente.BeEstadoCliente.Descripcion = amd[14].ToString();
							cliente.BeCategoriaCliente = new BECategoriaCliente();
							cliente.BeCategoriaCliente.IdCategoria = int.Parse(amd[15].ToString());
							cliente.BeCategoriaCliente.Nombre = amd[16].ToString();
							
							/*
							BETipoDocumento tipoDocumento = new BETipoDocumento();
							tipoDocumento.IdTipoDoc = int.Parse(amd[15].ToString());
							tipoDocumento.Descripcion = amd[16].ToString();
							cliente.BeTipoDocumento = tipoDocumento;
							*/
							/*
							cliente.DocumentoIdentidad = amd[5].ToString();
							cliente.Sexo = amd[6].ToString();
							cliente.Direccion = amd[8].ToString();
							cliente.TelefonoContacto = amd[9].ToString();
							cliente.FechaNacimiento = Convert.ToDateTime(amd[7].ToString());
							cliente.FechaCreacion = Convert.ToDateTime(amd[10].ToString());
							cliente.FechaModificacion = Convert.ToDateTime(amd[11].ToString());
							*/
							
							/*
							BEEstadoCliente beEstadoCliente =  new BEEstadoCliente();
							beEstadoCliente.IdEstadoCliente = int.Parse(amd[17].ToString());
							beEstadoCliente.Descripcion = amd[18].ToString();
							cliente.BeEstadoCliente = beEstadoCliente;
							*/
							/*
							BECategoriaCliente beCategoriaCliente = new BECategoriaCliente();
							beCategoriaCliente.IdCategoria = int.Parse(amd[19].ToString());
							beCategoriaCliente.Nombre = amd[20].ToString();
							cliente.BeCategoriaCliente = beCategoriaCliente;
							*/
																	
							lista.Add(cliente);
					}
				}
			}
			catch(SqlException e)
			{
				System.Windows.Forms.MessageBox.Show(e.ToString(),"Error");					
			}
			
			if (amd != null)
				amd.Close();
			return lista;												
		}
		
		public int eliminarCliente(BECliente beCliente)
		{
			int estadoTran = 0;
			
			try 
			{
				SqlCommand cmd = new SqlCommand("VENTAS_ELIMINAR_CLIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDCLIENTE", SqlDbType.Int);
				cmd.Parameters["@IDCLIENTE"].Value = beCliente.IdCliente;
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				//ConnectionManager.closeConnection();
			}
			catch(SqlException e)
			{
				System.Windows.Forms.MessageBox.Show(e.ToString(),"Error");
			}
			
			return estadoTran;
		}
		
		public int actualizarCliente(BECliente beCliente)
		{
			int estadoTran = 0;
			//System.Windows.Forms.MessageBox.Show("entra aqui :D "+ beCliente.Id);
			
			try {
				
				SqlCommand cmd = new SqlCommand("VENTAS_ACTUALIZAR_CLIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;							
				
				//INFOR PERSONAL		
				cmd.Parameters.Add("@IDCLIENTE", SqlDbType.Int);
				cmd.Parameters["@IDCLIENTE"].Value = beCliente.IdCliente;
				
				cmd.Parameters.Add("@NOMBRE", SqlDbType.VarChar, 100);
				cmd.Parameters["@NOMBRE"].Value = beCliente.Nombre;
				
				cmd.Parameters.Add("@APPATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APPATERNO"].Value = beCliente.ApellidoPaterno;
				
				cmd.Parameters.Add("@APMATERNO", SqlDbType.VarChar, 100);
				cmd.Parameters["@APMATERNO"].Value = beCliente.ApellidoMaterno;
				
				cmd.Parameters.Add("@SEXO", SqlDbType.VarChar, 20);
				cmd.Parameters["@SEXO"].Value = beCliente.Sexo;
				
				cmd.Parameters.Add("@IDTIPODOCUMENTO", SqlDbType.Int);
				cmd.Parameters["@IDTIPODOCUMENTO"].Value = beCliente.BeTipoDocumento.IdTipoDoc;
				
				cmd.Parameters.Add("@DOCIDENTIDAD", SqlDbType.VarChar, 20);
				cmd.Parameters["@DOCIDENTIDAD"].Value = beCliente.DocumentoIdentidad;
				
				cmd.Parameters.Add("@FECNACIMIENTO", SqlDbType.DateTime);
				cmd.Parameters["@FECNACIMIENTO"].Value = beCliente.FechaNacimiento;				
				
				//info de contacto				
				cmd.Parameters.Add("@DIRECCION", SqlDbType.VarChar, 200);
				cmd.Parameters["@DIRECCION"].Value = beCliente.Direccion;
				
				cmd.Parameters.Add("@TELEFONO", SqlDbType.VarChar, 15);
				cmd.Parameters["@TELEFONO"].Value = beCliente.TelefonoContacto;
				
				//INFO CONFIGURACION				
				cmd.Parameters.Add("@FECCREACION", SqlDbType.DateTime);
				cmd.Parameters["@FECCREACION"].Value = beCliente.FechaCreacion;
				
				cmd.Parameters.Add("@FECULTMODIFICACION", SqlDbType.DateTime);
				cmd.Parameters["@FECULTMODIFICACION"].Value = beCliente.FechaModificacion;
				
				cmd.Parameters.Add("@IDESTADO", SqlDbType.Int);
				cmd.Parameters["@IDESTADO"].Value = beCliente.BeEstadoCliente.IdEstadoCliente;
				
				cmd.Parameters.Add("@IDCATEGORIA", SqlDbType.Int);
				cmd.Parameters["@IDCATEGORIA"].Value = beCliente.BeCategoriaCliente.IdCategoria;
				
				//cmd.Parameters.Add("@IDUSUARIO", SqlDbType.Int);
				//cmd.Parameters["@IDUSUARIO"].Value = beCliente.?¿;
								
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
				
				cmd.ExecuteNonQuery();			
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;		
				//ConnectionManager.closeConnection();
			}
			catch(SqlException e)
			{			
				System.Windows.Forms.MessageBox.Show(e.ToString(),"Error");
			}
			
			return estadoTran;
		}
		
		public Boolean existeCliente(BECliente cliente)
		{			
			int valor = 0;
			Object estadoTran = null;
			SqlDataReader amd = null;			
			
			try{
				SqlCommand cmd = new SqlCommand("VENTAS_EXISTE_CLIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;								
				
				cmd.Parameters.Add("@IDCLIENTE",SqlDbType.Int);
				cmd.Parameters["@IDCLIENTE"].Value = cliente.IdCliente;
				
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;															
												
				amd = cmd.ExecuteReader();				
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;														
				
				if (amd.HasRows) 
				{					
					
					while(amd.Read())
					{											
						valor = Convert.ToInt16(amd[0]);				
					}					
										
				}				
			}
			catch(Exception ex)
			{
				System.Windows.Forms.MessageBox.Show(ex.ToString(),"Error");				
			}
			
			if (amd != null)
				amd.Close();
			
			if(valor == 1)
				return true;
			else
				return false;

		}
		
		public Boolean existePedidoVentaPendiente(BECliente cliente)
		{
			int valor = 0;
			Object estadoTran = null;
			SqlDataReader amd = null;			
			
			try{
				SqlCommand cmd = new SqlCommand("VENTAS_EXISTE_PEDIDOVENTA_PENDIENTE_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;								
				
				cmd.Parameters.Add("@IDCLIENTE",SqlDbType.Int);
				cmd.Parameters["@IDCLIENTE"].Value = cliente.IdCliente;
				
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;															
												
				amd = cmd.ExecuteReader();				
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;														
				
				if (amd.HasRows) 
				{										
					while(amd.Read())
					{											
						valor = Convert.ToInt16(amd[0]);				
					}					
										
				}				
			}
			catch(Exception ex)
			{
				System.Windows.Forms.MessageBox.Show(ex.ToString(),"Error");				
			}
			
			if (amd != null)
				amd.Close();
			
			if(valor >= 1)
				return true;
			else
				return false;
			
		}
		
		public Boolean existeServiciosPendientesMascotas(BECliente cliente)
		{
			int valor = 0;
			Object estadoTran = null;
			SqlDataReader amd = null;			
			
			try{
				SqlCommand cmd = new SqlCommand("VENTAS_EXISTE_SERVICIO_PENDIENTE_MASCOTAS_R", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;								
				
				cmd.Parameters.Add("@IDCLIENTE",SqlDbType.Int);
				cmd.Parameters["@IDCLIENTE"].Value = cliente.IdCliente;
				
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;															
												
				amd = cmd.ExecuteReader();				
				estadoTran = cmd.Parameters["@ESTADOTRAN"].Value;														
				
				if (amd.HasRows) 
				{										
					while(amd.Read())
					{											
						valor = Convert.ToInt16(amd[0]);				
					}					
										
				}				
			}
			catch(Exception ex)
			{
				System.Windows.Forms.MessageBox.Show(ex.ToString(),"Error");				
			}
			
			if (amd != null)
				amd.Close();
			
			if(valor >= 1)
				return true;
			else
				return false;
		}
	}
	
	
}
